package com.ndp.fb.walle.util;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;


import java.util.List;
import java.util.Map;

/**
 * Created by Evan on 2016/8/16.
 */
public class ExcelUtil {
    /**
     * 创建excel文档，
     * [@param] list 数据
     * [@param] 汇总 数据
     * @param columnNames excel的列名
     * */
    public static HSSFWorkbook createWorkBook(List<Map<String, Object>> list, List<Map<String, Object>> gather, List<String> columnNames) {
        // 创建excel工作簿
        HSSFWorkbook  wb = new HSSFWorkbook();
        // 创建第一个sheet（页），并命名
        HSSFSheet sheet = wb.createSheet(list.get(0).get("sheetName").toString());
        // 手动设置列宽。第一个参数表示要为第几列设；，第二个参数表示列的宽度，n为列高的像素数。
        for(int i=0;i<columnNames.size();i++){
            sheet.setColumnWidth((short) i, (short) (35.7 * 150));
        }

        // 创建第一行
        HSSFRow row = sheet.createRow((short) 0);

        // 创建两种单元格格式
        CellStyle cs = wb.createCellStyle();
        CellStyle cs2 = wb.createCellStyle();
        CellStyle cs3 = wb.createCellStyle();

        // 创建两种字体
        HSSFFont f = wb.createFont();
        HSSFFont f2 = wb.createFont();

        // 创建第一种字体样式（用于列名）
        f.setFontHeightInPoints((short) 10);
        f.setColor(IndexedColors.BLACK.getIndex());
        f.setBoldweight(Font.BOLDWEIGHT_BOLD);

        // 创建第二种字体样式（用于值）
        f2.setFontHeightInPoints((short) 10);
        f2.setColor(IndexedColors.BLACK.getIndex());

//        Font f3=wb.createFont();
//        f3.setFontHeightInPoints((short) 10);
//        f3.setColor(IndexedColors.RED.getIndex());

        // 设置第一种单元格的样式（用于列名）
        cs.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
        cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        cs.setFont(f);
        cs.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        cs.setBorderRight(HSSFCellStyle.BORDER_THIN);
        cs.setBorderTop(HSSFCellStyle.BORDER_THIN);
        cs.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);


        // 设置第二种单元格的样式（用于值）
        cs2.setFont(f2);
        cs2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        cs2.setBorderRight(HSSFCellStyle.BORDER_THIN);
        cs2.setBorderTop(HSSFCellStyle.BORDER_THIN);
        cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        cs2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

        // 设置第三种单元格的样式（用于汇总值）
        cs3.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index);
        cs3.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        cs3.setFont(f2);
        cs3.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //设置列名
        for(int i=0;i<columnNames.size();i++){
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(ResponseUtils.getMsgByKey(columnNames.get(i)));
            cell.setCellStyle(cs);
        }
        //设置每行每列的值
        for (short i = 1; i < list.size(); i++) {
            // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
            // 创建一行，在页sheet上
            HSSFRow row1 = sheet.createRow((short) i);
            // 在row行上创建一个方格
            for(short j=0;j<columnNames.size();j++){
                HSSFCell cell = row1.createCell(j);
                cell.setCellValue(list.get(i).get(columnNames.get(j)) == null?" ": list.get(i).get(columnNames.get(j)).toString());
                cell.setCellStyle(cs2);
            }
        }

        for(short m=0;m<gather.size();m++) {
            HSSFRow rowGather = sheet.createRow((short) (m+1+list.size()));
            for(short n=0;n<columnNames.size();n++) {
                HSSFCell cell = rowGather.createCell(n);
                cell.setCellValue(gather.get(m).get(columnNames.get(n)) == null?" ": gather.get(m).get(columnNames.get(n)).toString());
                cell.setCellStyle(cs3);
            }
        }

        return wb;
    }

}
